; -*-Scheme-*-

;************************************************************************/
;*                                                                      */
;* Copyright (c) 2003-2009 Vladimir Tsichevski <tsichevski@gmail.com>   */
;*                                                                      */
;* This file is part of bigloo-lib (http://bigloo-lib.sourceforge.net)  */
;*                                                                      */
;* This library is free software; you can redistribute it and/or        */
;* modify it under the terms of the GNU Lesser General Public           */
;* License as published by the Free Software Foundation; either         */
;* version 2 of the License, or (at your option) any later version.     */
;*                                                                      */
;* This library is distributed in the hope that it will be useful,      */
;* but WITHOUT ANY WARRANTY; without even the implied warranty of       */
;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    */
;* Lesser General Public License for more details.                      */
;*                                                                      */
;* You should have received a copy of the GNU Lesser General Public     */
;* License along with this library; if not, write to the Free Software  */
;* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 */
;* USA                                                                  */
;*                                                                      */
;************************************************************************/
(module
 xmlsave
 (import xtree xmlregexp xmlio encoding)
 (library common)
 (include "common.sch")
 (extern
  (include "libxml/xmlsave.h")
  )
 )

;; typedef enum {
;;     XML_SAVE_FORMAT     = 1<<0	/* format save output */
;; } xmlSaveOption


(define-object xmlSaveCtxt ())

;; xmlSaveCtxt
;; 		xmlSaveToFd		(int fd,
;; 					 const char *encoding,
;; 					 int options)
;; xmlSaveCtxt
;; 		xmlSaveToFilename	(const char *filename,
;; 					 const char *encoding,
;; 					 int options)

; (define-func xmlSaveToBuffer xmlSaveCtxt
;   ((xmlBuffer buffer)
;    (string encoding "char *")
;    (int options)))

;; xmlSaveCtxt
;; 		xmlSaveToIO		(xmlOutputWriteCallback iowrite,
;; 					 xmlOutputCloseCallback ioclose,
;; 					 void *ioctx,
;; 					 const char *encoding,
;; 					 int options)

(define-func xmlSaveDoc long ((xmlSaveCtxt ctxt)(xmlDoc doc)))

(define-func xmlSaveTree long
  ((xmlSaveCtxt ctxt)
   (xmlNode node)))

(define-func xmlSaveFlush int ((xmlSaveCtxt ctxt)))

(define-func xmlSaveClose int ((xmlSaveCtxt ctxt)))
;; int
;; 		xmlSaveSetEscape	(xmlSaveCtxt ctxt,
;; 					 xmlCharEncodingOutputFunc escape)
;; int
;; 		xmlSaveSetAttrEscape	(xmlSaveCtxt ctxt,
;; 					 xmlCharEncodingOutputFunc escape)

(define-export (xml-node-dump-output
		buf::xml-output-buffer
		cur::xmlobj
		#!key
		level
		doc
		encoding)
  (let* ((buf::xml-output-buffer buf)
	 (doc::xml-doc (or doc (xmlobj-doc cur)))
	 (cur::xml-node cur)
	 (level::int (or level (pragma::int "0")))
	 (format::bool level)
	 (encoding::string (or encoding (xml-doc-encoding doc))))
    (pragma
     "xmlNodeDumpOutput($1, $2, $3, $4, $5, (char*)$6)"
     buf
     doc
     cur
     level
     format
     encoding)
    #unspecified))

